package android.system.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 　MD5即Message-Digest Algorithm 5（信息-摘要算法
 * 5），用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一（又译摘要算法、哈希算法），主流编程语言普遍已有MD5实现。
 * 
 * @author yue
 * 
 */
public class MD5Tool {

	// /**
	// * 获取数据的MD5的编码
	// * @param data
	// * @return 16位的二进制数据
	// */
	// public static byte[] getMD5(byte[] data) {
	//
	// MessageDigest messageDigest = null;
	// try {
	// messageDigest = MessageDigest.getInstance("MD5" );
	// messageDigest.reset();
	// messageDigest.update(data);
	// return messageDigest.digest();
	// } catch (NoSuchAlgorithmException e) {
	// return null;
	// }
	//
	//
	// }
//自定义 md5
//	public final static String MD5(String s) {
//		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
//				'a', 'b', 'c', 'd', 'e', 'f' };
//		try {
//			byte[] strTemp = s.getBytes();
//			MessageDigest mdTemp = MessageDigest.getInstance("MD5");
//			mdTemp.update(strTemp);
//			byte[] md = mdTemp.digest();
//			int j = md.length;
//			char str[] = new char[j * 2];
//			int k = 0;
//			for (int i = 0; i < j; i++) {
//				byte byte0 = md[i];
//				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
//				str[k++] = hexDigits[byte0 & 0xf];
//			}
//			return new String(str);
//		} catch (Exception e) {
//
//			return null;
//		}
//	}

	private static MessageDigest md5 = null;
	public static String getMD5(String inStr) {
		if (md5 == null)
			try {

				md5 = MessageDigest.getInstance("MD5");
			} catch (Exception e) {

				e.printStackTrace();
				return null;
			}
		char[] charArray = inStr.toCharArray();

		byte[] byteArray = new byte[charArray.length];

		for (int i = 0; i < charArray.length; i++)
			byteArray[i] = (byte) charArray[i];

		byte[] md5Bytes = md5.digest(byteArray);

		StringBuffer hexValue = new StringBuffer();

		for (int i = 0; i < md5Bytes.length; i++) {
			int val = ((int) md5Bytes[i]) & 0xff;// 转为16进制
			if (val < 16)
				hexValue.append("0"); // 两位一组
			hexValue.append(Integer.toHexString(val));
		}

		return hexValue.toString();
	}

	// 可逆的加密算法
	public static String KL(String inStr) {
		// String s = new String(inStr);
		char[] a = inStr.toCharArray();
		for (int i = 0; i < a.length; i++) {
			a[i] = (char) (a[i] ^ 't');
		}
		String s = new String(a);
		return s;
	}

	// 加密后解密
	public static String JM(String inStr) {
		char[] a = inStr.toCharArray();
		for (int i = 0; i < a.length; i++) {
			a[i] = (char) (a[i] ^ 't');
		}
		String k = new String(a);
		return k;
	}

}
